/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package proy1sistdistribuidos.modelo;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import net.jxta.discovery.DiscoveryEvent;
import net.jxta.discovery.DiscoveryListener;
import net.jxta.document.Advertisement;
import proy1sistdistribuidos.control.advertisements.AdvertisementImagenImpl;

/**
 *
 * @author Juan Felipe
 */
public class BusquedaImagenListener implements DiscoveryListener{
    private List<AdvertisementImagenImpl> lista = new ArrayList<AdvertisementImagenImpl>();
    private Long colorEntrada;
    private Long tamanhoEntrada;
    public static final double cotaInferior = 0.8d;
    public static final double cotaSuperior = 1.2d;
    private AdministradorJXTA administrador;

    public BusquedaImagenListener(long colorEntrada, long tamanhoEntrada, AdministradorJXTA admin) {
        this.colorEntrada = colorEntrada;
        this.tamanhoEntrada = tamanhoEntrada;
        this.administrador = admin;
    }
    
    
    
    public void discoveryEvent(DiscoveryEvent de) {
       //System.out.println("HAHAHAHAHAHA");

        Enumeration<Advertisement> respuestas = de.getSearchResults();
        
        
        while (respuestas.hasMoreElements()){
            Object advertisement = respuestas.nextElement();
            if(advertisement instanceof AdvertisementImagenImpl){
               AdvertisementImagenImpl ad = (AdvertisementImagenImpl)advertisement;
               if(ad.getColorPromedio()!=null && ad.getTamano()!=null){
                 Long promedioK = Long.parseLong(ad.getColorPromedio());
                 Long tamanhoK = ad.getTamano();

                 Double funcDistancia = ((this.colorEntrada.doubleValue()/promedioK.doubleValue()) + (this.tamanhoEntrada.doubleValue()/tamanhoK.doubleValue()))/2;

                 if(funcDistancia.doubleValue()>=cotaInferior && funcDistancia.doubleValue()<=cotaSuperior){
                    lista.add(ad);
                 }
               }

            }
        }

        //*setChanged();
        //notifyObservers(nodosEncontrados);
    }

    


    /**
     * @return the lista
     */
    public List<AdvertisementImagenImpl> getLista() {
        return lista;
    }

    /**
     * @param lista the lista to set
     */
    public void setLista(List<AdvertisementImagenImpl> lista) {
        this.lista = lista;
    }

    /**
     * @return the administrador
     */
    public AdministradorJXTA getAdministrador() {
        return administrador;
    }

    /**
     * @param administrador the administrador to set
     */
    public void setAdministrador(AdministradorJXTA administrador) {
        this.administrador = administrador;
    }

    
    
}
